#include "device_music.h"
#include "ui_device_music.h"  // 将此行移动到此处
#include <QMessageBox>
DeviceMusic::DeviceMusic(int room, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::DeviceMusic)
{
    ui->setupUi(this);


    room_name = room; // 初始化房间编号

    // 初始化音乐播放器
    music_player = new QMediaPlayer(this);
    music_player_list = new QMediaPlaylist(this);

    // 添加音乐文件
    music_player_list->addMedia(QUrl::fromLocalFile("../music/天空没有极限.MP3"));
    music_player_list->addMedia(QUrl::fromLocalFile("../music/彩卷.MP3"));
    music_player_list->addMedia(QUrl::fromLocalFile("../music/where did u go.MP3"));
    music_player_list->addMedia(QUrl::fromLocalFile("../music/知我.MP3"));


    // 设置播放列表
    music_player->setPlaylist(music_player_list);
    music_player->setVolume(50);

    // 创建并配置滑动按钮
    my_Slider_btn = new SliderButton(this);
    my_Slider_btn->set_button_color(QColor(36, 110, 202), QColor(188, 188, 188), QColor(255, 255, 255));
    my_Slider_btn->set_button_size(30, 40);
    my_Slider_btn->move(170, 15);

    // 设置背景样式
    this->setStyleSheet("#frame_background{background-color:rgba(244, 252, 255, 0.4);border-radius:50px}");

    // 初始化灯的关闭状态样式
    movie = new QMovie("../image/音乐.gif");  // 加载 GIF 图片
    ui->label_music->setScaledContents(true);   // 设置 QLabel 自适应大小
    ui->label_music->setMovie(movie);   // 将 QMovie 对象绑定到 QLabel
    // 设置 QLabel 透明背景
    ui->label_music->setAttribute(Qt::WA_TranslucentBackground, true);
    ui->label_music->setStyleSheet("background: transparent;");
    // 开始播放后停止 GIF （为了让gif正常显示）
    movie->start();
    movie->stop();

    //连接开关
    connect(my_Slider_btn, SIGNAL(signal_button_off()), this, SLOT(music_slider_OFF()));
    connect(my_Slider_btn, SIGNAL(signal_button_on()), this, SLOT(music_slider_ON()));
}

DeviceMusic::~DeviceMusic()
{
    delete ui;
}


/***********************************
 * 名称：music_slider_ON
 * 功能: 音乐开关-开
 * 说明：当滑动按钮打开时触发，发送控制数据并更新界面状态为开启
 ***********************************/
void DeviceMusic::music_slider_ON(void)
{
    emit log_message("音乐开");
    emit update_foreground(true);

    // 开始播放 GIF
    movie->start();
    music_player->play();


    // 更新其他界面状态
    ui->label_onoff->setStyleSheet("color:rgb(36,110,202)");
    ui->label_onoff->setText("ON");
}


/***********************************
 * 名称：music_slider_OFF
 * 功能: 音乐开关-关
 * 说明：当滑动按钮关闭时触发，发送控制数据并更新界面状态为关闭
 ***********************************/
void DeviceMusic::music_slider_OFF(void)
{
    emit log_message("音乐关");
    emit update_foreground(false);

    // 开始播放 GIF
    movie->stop();
    music_player->pause();

    // 更新其他界面状态
    ui->label_onoff->setStyleSheet("color:rgb(40,40,40)");
    ui->label_onoff->setText("OFF");
}

void DeviceMusic::on_previous_clicked()
{
    //下一首
    int currentIndex = music_player_list->currentIndex();
    if (currentIndex < music_player_list->mediaCount() - 1) {
        music_player_list->next();
        music_player->play();
    }
}

void DeviceMusic::on_last_clicked()
{
    //上一首
    int currentIndex = music_player_list->currentIndex();
    if (currentIndex > 0) {
        music_player_list->previous();
        music_player->play();
    }
}

/***********************************
 * 名称：simulateMousePressMusic
 * 功能: 模拟点击开关
 * 说明：用来语音控制，语音激活后模拟用户点击开关，考虑到标签隐藏问题，但是已经处理好了
 ***********************************/
void DeviceMusic::simulateMousePressMusic() {

    if (!my_Slider_btn) {
        return;
    }

    // 创建一个模拟的鼠标事件
    QPoint globalPos = this->mapToGlobal(QPoint(0, 0)); // 将按钮的左上角映射到全局坐标系
    QPoint btnPos = my_Slider_btn->mapFromGlobal(globalPos); // 将全局坐标映射到按钮的局部坐标系
    QMouseEvent *pressEvent = new QMouseEvent(QEvent::MouseButtonPress,
                                              btnPos, // 鼠标事件发生的位置，相对于按钮
                                              Qt::LeftButton, // 鼠标按钮（左键）
                                              Qt::LeftButton, // 事件发生时的按钮状态
                                              Qt::NoModifier); // 事件发生时的修饰键

    // 发送事件给按钮的事件处理函数
    QApplication::sendEvent(my_Slider_btn, pressEvent);

    // 释放事件对象的内存
    delete pressEvent;
}
